home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / tcl / tcl70b2.lha / tcl7.0b2 / tests / scan.test < prev    next >
Text File  |  1993-07-16  |  10KB  |  256 lines

  1. # Commands covered:  scan
  2. #
  3. # This file contains a collection of tests for one or more of the Tcl
  4. # built-in commands.  Sourcing this file into Tcl runs the tests and
  5. # generates output for errors.  No output means no errors were found.
  6. #
  7. # Copyright (c) 1991-1993 The Regents of the University of California.
  8. # All rights reserved.
  9. #
  10. # Permission is hereby granted, without written agreement and without
  11. # license or royalty fees, to use, copy, modify, and distribute this
  12. # software and its documentation for any purpose, provided that the
  13. # above copyright notice and the following two paragraphs appear in
  14. # all copies of this software.
  15. #
  16. # IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  17. # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  18. # OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  19. # CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  20. #
  21. # THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  22. # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  23. # AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  24. # ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  25. # PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  26. #
  27. # $Header: /user6/ouster/tcl/tests/RCS/scan.test,v 1.16 93/07/16 16:50:35 ouster Exp $ (Berkeley)
  28.  
  29. if {[string compare test [info procs test]] == 1} then {source defs}
  30.  
  31. test scan-1.1 {integer scanning} {
  32.     set a {}; set b {}; set c {}; set d {}
  33.     list [scan "-20 1476 \n33 0" "%d %d %d %d" a b c d] $a $b $c $d
  34. } {4 -20 1476 33 0}
  35. test scan-1.2 {integer scanning} {
  36.     set a {}; set b {}; set c {}
  37.     list [scan "-45 16 7890 +10" "%2d %*d %10d %d" a b c] $a $b $c
  38. } {3 -4 16 7890}
  39. test scan-1.3 {integer scanning} {
  40.     set a {}; set b {}; set c {}; set d {}
  41.     list [scan "-45 16 +10 987" "%ld %d %ld %d" a b c d] $a $b $c $d
  42. } {4 -45 16 10 987}
  43. test scan-1.4 {integer scanning} {
  44.     set a {}; set b {}; set c {}; set d {}
  45.     list [scan "14 1ab 62 10" "%d %x %lo %x" a b c d] $a $b $c $d
  46. } {4 14 427 50 16}
  47. test scan-1.5 {integer scanning} {
  48.     set a {}; set b {}; set c {}; set d {}
  49.     list [scan "12345670 1234567890ab cdefg" "%o     %o %x %lx" a b c d] \
  50.         $a $b $c $d
  51. } {4 2739128 342391 561323 52719}
  52. test scan-1.6 {integer scanning} {
  53.     set a {}; set b {}; set c {}; set d {}
  54.     list [scan "ab123-24642" "%2x %3x %3o %2o" a b c d] $a $b $c $d
  55. } {4 171 291 -20 52}
  56. test scan-1.7 {integer scanning} {
  57.     set a {}; set b {}
  58.     list [scan "1234567 234 567  " "%*3x %x %*o %4o" a b] $a $b
  59. } {2 17767 375}
  60. test scan-1.8 {integer scanning} {
  61.     set a {}; set b {}
  62.     list [scan "a    1234" "%d %d" a b] $a $b
  63. } {0 {} {}}
  64. test scan-1.9 {integer scanning} {
  65.     set a {}; set b {}; set c {}; set d {};
  66.     list [scan "12345678" "%2d %2d %2ld %2d" a b c d] $a $b $c $d
  67. } {4 12 34 56 78}
  68. test scan-1.10 {integer scanning} {
  69.     set a {}; set b {}; set c {}; set d {}
  70.     list [scan "1 2 " "%hd %d %d %d" a b c d] $a $b $c $d
  71. } {2 1 2 {} {}}
  72. if $atBerkeley {
  73.     test scan-1.11 {integer scanning} {
  74.     set a {}; set b {};
  75.     list [scan "4294967280 4294967280" "%u %d" a b] $a $b
  76.     } {2 4294967280 -16}
  77. }
  78.  
  79. test scan-2.1 {floating-point scanning} {
  80.     set a {}; set b {}; set c {}; set d {}
  81.     list [scan "2.1 -3.0e8 .99962 a" "%f%g%e%f" a b c d] $a $b $c $d
  82. } {3 2.1 -3e+08 0.99962 {}}
  83. test scan-2.2 {floating-point scanning} {
  84.     set a {}; set b {}; set c {}; set d {}
  85.     list [scan "-1.2345 +8.2 9" "%3e %3lf %f %f" a b c d] $a $b $c $d
  86. } {4 -1.0 234.0 5.0 8.2}
  87. test scan-2.3 {floating-point scanning} {
  88.     set a {}; set b {}; set c {}
  89.     list [scan "1e00004 332E-4 3e+4" "%Lf %*2e %f %f" a b c] $a $c
  90. } {3 10000.0 30000.0}
  91. if $atBerkeley {
  92.     test scan-2.4 {floating-point scanning} {
  93.     set a {}; set b {}; set c {}
  94.     list [scan "1. 47.6 2.e2 3.e-" "%f %*f %f %f" a b c] $a $b $c
  95.     } {3 1.0 200.0 3.0}
  96.     test scan-2.5 {floating-point scanning} {
  97.     set a {}; set b {}
  98.     list [scan "1.eabc" "%f %x" a b] $a $b
  99.     } {2 1.0 2748}
  100. }
  101. test scan-2.6 {floating-point scanning} {
  102.     set a {}; set b {}; set c {}; set d {}
  103.     list [scan "4.6 99999.7 876.43e-1 118" "%f %f %f %e" a b c d] $a $b $c $d
  104. } {4 4.6 99999.7 87.643 118.0}
  105. test scan-2.7 {floating-point scanning} {
  106.     set a {}; set b {}; set c {}; set d {}
  107.     list [scan "1.2345 697.0e-3 124 .00005" "%f %e %f %e" a b c d] $a $b $c $d
  108. } {4 1.2345 0.697 124.0 5e-05}
  109. test scan-2.8 {floating-point scanning} {
  110.     set a {}; set b {}; set c {}; set d {}
  111.     list [scan "4.6abc" "%f %f %f %f" a b c d] $a $b $c $d
  112. } {1 4.6 {} {} {}}
  113. test scan-2.9 {floating-point scanning} {
  114.     set a {}; set b {}; set c {}; set d {}
  115.     list [scan "4.6 5.2" "%f %f %f %f" a b c d] $a $b $c $d
  116. } {2 4.6 5.2 {} {}}
  117.  
  118. test scan-3.1 {string and character scanning} {
  119.     set a {}; set b {}; set c {}; set d {}
  120.     list [scan "abc defghijk dum " "%s %3s %20s %s" a b c d] $a $b $c $d
  121. } {4 abc def ghijk dum}
  122. test scan-3.2 {string and character scanning} {
  123.     set a {}; set b {}; set c {}; set d {}
  124.     list [scan "a       bcdef" "%c%c%1s %s" a b c d] $a $b $c $d
  125. } {4 97 32 b cdef}
  126. test scan-3.3 {string and character scanning} {
  127.     set a {}; set b {}; set c {}
  128.     list [scan "123456 test " "%*c%*s %s %s %s" a b c] $a $b $c
  129. } {1 test {} {}}
  130. test scan-3.4 {string and character scanning} {
  131.     set a {}; set b {}; set c {}; set d
  132.     list [scan "ababcd01234  f 123450" {%4[abcd] %4[abcd] %[^abcdef] %[^0]} a b c d] $a $b $c $d
  133. } {4 abab cd {01234  } {f 12345}}
  134. test scan-3.5 {string and character scanning} {
  135.     set a {}; set b {}; set c {}
  136.     list [scan "aaaaaabc aaabcdefg  + +  XYZQR" {%*4[a] %s %*4[a]%s%*4[ +]%c} a b c] $a $b $c
  137. } {3 aabc bcdefg 43}
  138.  
  139. test scan-4.1 {error conditions} {
  140.     catch {scan a}
  141. } 1
  142. test scan-4.2 {error conditions} {
  143.     catch {scan a} msg
  144.     set msg
  145. } {wrong # args: should be "scan string format ?varName varName ...?"}
  146. test scan-4.3 {error conditions} {
  147.     catch {scan "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21" "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21}
  148. } 1
  149. test scan-4.4 {error conditions} {
  150.     catch {scan "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21" "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21} msg
  151.     set msg
  152. } {too many fields to scan}
  153. test scan-4.5 {error conditions} {
  154.     list [catch {scan a %D} msg] $msg
  155. } {1 {bad scan conversion character "D"}}
  156. test scan-4.6 {error conditions} {
  157.     list [catch {scan a %O} msg] $msg
  158. } {1 {bad scan conversion character "O"}}
  159. test scan-4.7 {error conditions} {
  160.     list [catch {scan a %X} msg] $msg
  161. } {1 {bad scan conversion character "X"}}
  162. test scan-4.8 {error conditions} {
  163.     list [catch {scan a %F} msg] $msg
  164. } {1 {bad scan conversion character "F"}}
  165. test scan-4.9 {error conditions} {
  166.     list [catch {scan a %E} msg] $msg
  167. } {1 {bad scan conversion character "E"}}
  168. test scan-4.10 {error conditions} {
  169.     list [catch {scan a "%d %d" a} msg] $msg
  170. } {1 {different numbers of variable names and field specifiers}}
  171. test scan-4.11 {error conditions} {
  172.     list [catch {scan a "%d %d" a b c} msg] $msg
  173. } {1 {different numbers of variable names and field specifiers}}
  174. test scan-4.12 {error conditions} {
  175.     set a {}; set b {}; set c {}; set d {}
  176.     list [expr {[scan "  a" " a %d %d %d %d" a b c d] <= 0}] $a $b $c $d
  177. } {1 {} {} {} {}}
  178. test scan-4.13 {error conditions} {
  179.     set a {}; set b {}; set c {}; set d {}
  180.     list [scan "1 2" "%d %d %d %d" a b c d] $a $b $c $d
  181. } {2 1 2 {} {}}
  182. test scan-4.14 {error conditions} {
  183.     catch {unset a}
  184.     set a(0) 44
  185.     list [catch {scan 44 %d a} msg] $msg
  186. } {1 {couldn't set variable "a"}}
  187. test scan-4.15 {error conditions} {
  188.     catch {unset a}
  189.     set a(0) 44
  190.     list [catch {scan 44 %c a} msg] $msg
  191. } {1 {couldn't set variable "a"}}
  192. test scan-4.16 {error conditions} {
  193.     catch {unset a}
  194.     set a(0) 44
  195.     list [catch {scan 44 %s a} msg] $msg
  196. } {1 {couldn't set variable "a"}}
  197. test scan-4.17 {error conditions} {
  198.     catch {unset a}
  199.     set a(0) 44
  200.     list [catch {scan 44 %f a} msg] $msg
  201. } {1 {couldn't set variable "a"}}
  202. test scan-4.18 {error conditions} {
  203.     catch {unset a}
  204.     set a(0) 44
  205.     list [catch {scan 44 %f a} msg] $msg
  206. } {1 {couldn't set variable "a"}}
  207. catch {unset a}
  208. test scan-4.19 {error conditions} {
  209.     list [catch {scan 44 %2c a} msg] $msg
  210. } {1 {field width may not be specified in %c conversion}}
  211.  
  212. test scan-5.1 {lots of arguments} {
  213.     scan "10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200" "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20
  214. } 20
  215. test scan-5.2 {lots of arguments} {
  216.     scan "10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200" "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20
  217.     set a20
  218. } 200
  219.  
  220. test scan-6.1 {miscellaneous tests} {
  221.     set a {}
  222.     list [scan ab16c ab%dc a] $a
  223. } {1 16}
  224. test scan-6.2 {miscellaneous tests} {
  225.     set a {}
  226.     list [scan ax16c ab%dc a] $a
  227. } {0 {}}
  228. test scan-6.3 {miscellaneous tests} {
  229.     set a {}
  230.     list [catch {scan ab%c114 ab%%c%d a} msg] $msg $a
  231. } {0 1 114}
  232. test scan-6.4 {miscellaneous tests} {
  233.     set a {}
  234.     list [catch {scan ab%c14 ab%%c%d a} msg] $msg $a
  235. } {0 1 14}
  236. test scan-6.5 {miscellaneous tests} {
  237.     catch {unset tcl_precision}
  238.     set a {}
  239.     scan 1.111122223333 %f a
  240.     set a
  241. } {1.11112}
  242. test scan-6.6 {miscellaneous tests} {
  243.     set tcl_precision 10
  244.     set a {}
  245.     scan 1.111122223333 %lf a
  246.     unset tcl_precision
  247.     set a
  248. } {1.111122223}
  249. test scan-6.7 {miscellaneous tests} {
  250.     set tcl_precision 10
  251.     set a {}
  252.     scan 1.111122223333 %f a
  253.     unset tcl_precision
  254.     set a
  255. } {1.111122223}
  256.